#ifndef __MC31xx_HAL_GPIO_H
#define __MC31xx_HAL_GPIO_H

#include "mc31xx_hal_def.h"

#ifdef __cplusplus
extern "C" {
#endif



/**
  * @brief GPIO 初始化结构体
  */
typedef struct
{
    uint32_t Pin;           //引脚号 GPIO_PIN_x
    uint8_t OutputEn;       //输出使能
    uint8_t InputEn;        //输入使能
    uint8_t PullupEn;        //上拉和不拉
    uint8_t DriveMode;      //驱动强度 暂时不用
    uint32_t DevClkDiv;     //外设分频 暂时写死
} GPIO_InitTypeDef;

/**
  * @brief  GPIO Bit SET and Bit RESET enumeration
  */
typedef enum
{
    GPIO_PIN_RESET = 0u,
    GPIO_PIN_SET
} GPIO_PinState;


/* Initialization and de-initialization functions *****************************/
void  HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init);
void  HAL_GPIO_DeInit(GPIO_TypeDef  *GPIOx, uint32_t GPIO_Pin);

/* IO operation functions *****************************************************/
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin, GPIO_PinState PinState);
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);
void HAL_GPIO_SetInOut(GPIO_TypeDef* GPIOx, uint32_t GPIO_Pin, FunctionalState Input, FunctionalState Output);

/* Private macros ------------------------------------------------------------*/
/** @defgroup GPIO_Private_Macros GPIO Private Macros
  * @{
  */
#define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET))
#define IS_GPIO_PIN(PIN)           (((((uint32_t)PIN) & GPIO_PIN_MASK ) != 0x00u) && ((((uint32_t)PIN) & ~GPIO_PIN_MASK) == 0x00u))
#define IS_GPIO_ALL_INSTANCE(INSTANCE) (((INSTANCE) == GPIOA) || \
                                        ((INSTANCE) == GPIOB) || \
                                        ((INSTANCE) == GPIOC) || \
                                        ((INSTANCE) == GPIOD))

#ifdef __cplusplus
}
#endif

#endif 

